class Watcher {  //实例化的时候往dep中添加自己
    constructor(vm, key, cb) {
        this.vm = vm
        // data中的属性名称
        this.key = key
        // 回调函数负责更新视图
        this.cb = cb
        // 把watcher对象记录到Dep类的静态属性target
        // 触发get方法，在get方法中会调用addSub
        // watcher实例就是依赖，dep收集的就是watcher
        Dep.target = this

        //vm[key]会触发vue.js的响应式get，
        //然后触发obsserve.js的get方法，
        //然后会触发dep.addsub方法 把watcher添加到dep的subs数组中
        //创建watcher的目的就是保留初始值，，方便新的和初始值对比
        this.oldValue = vm[key]
        Dep.target = null //防止重复添加
    }

    // 当数据发生变化的时候更新视图
    update() {
        let newValue = this.vm[this.key]
        if (this.oldValue === newValue) {
            return
        }
        this.cb(newValue)
    }
}